package com.ayu.shortlink.admin.remote.dto;

import com.ayu.shortlink.admin.common.convention.result.Result;
import com.ayu.shortlink.admin.config.OpenFeignConfiguration;
import com.ayu.shortlink.admin.remote.dto.req.*;
import com.ayu.shortlink.admin.remote.dto.resp.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 短链接后管中台调用
 */
@FeignClient(value = "Ayu-ShortLink-project",
        url = "${aggregation.remote-url:}",
        configuration = OpenFeignConfiguration.class)
public interface ShortLinkActualRemoteService {
    /**
     * 后管创建短链接
     * @param requestParam 创建短链接请求参数
     * @return 创建短链接返回参数
     */
    @PostMapping("/api/short-link/v1/create")
    Result<ShortLinkCreateRespDTO> createShortLink(@RequestBody ShortLinkCreateReqDTO requestParam);

    /**
     * 后管批量创建短链接
     * @param requestParam 后管批量创建短链接请求参数
     * @return 后管批量创建短链接响应参数
     */
    @PostMapping("/api/short-link/v1/create/batch")
    Result<ShortLinkBatchCreateRespDTO> batchCreatShortLink(@RequestBody ShortLinkBatchCreateReqDTO requestParam);

    /**
     * 后管分页查询短链接
     * @return 分页查询结果
     */
    @GetMapping("/api/short-link/v1/page")
    Result<Page<ShortLinkPageRespDTO>> pageShortLink(@RequestParam("gid") String gid,
                                                     @RequestParam("orderTag") String OrderTag,
                                                     @RequestParam("current")Long current,
                                                     @RequestParam("size")Long size);

    /**
     * 查询短链接各分组数量
     * @param requestParam 查询短链接分组内数量请求参数
     * @return 短链接分组内数量查询结果
     */
    @GetMapping("/api/short-link/v1/count")
    Result<List<ShortLinkGroupCountRespDTO>> listGroupShortLinkCount(@RequestParam("requestParam") List<String> requestParam);

    /**
     * 后管更新短链接内容
     * @param requestParam 更新短链接内容请求参数
     */
    @PostMapping("/api/short-link/v1/update")
    void updateShortLink(@RequestBody ShortLinkUpdateReqDTO requestParam);

    /**
     * 后管通过网站url获取网站标题 (ok)
     * @param requestParam 网站url
     * @return 网站标题
     */
    @GetMapping("/api/short-link/v1/title")
    Result<String> getLinkTitle(@RequestParam("url") String requestParam);

    /**
     * 后管回收站增加 (ok)
     * @param requestParam 回收短链接请求参数
     */
    @PostMapping("/api/short-link/v1/recycle-bin/save")
    void saveRecycleBin(@RequestBody RecycleBinSaveDTO requestParam);

    /**
     * 后管分页查询回收站短链接 (ok)
     * @return 查询返回结果
     */
    @GetMapping("/api/short-link/v1/recycle-bin/page")
    Result<Page<ShortLinkPageRespDTO>> getPage(@RequestParam("gidList") List<String> gidList,
                                               @RequestParam("current") Long current,
                                               @RequestParam("size") Long size);
    /**
     * 后管回收站恢复短链接 (ok)
     * @param requestParam 请求参数
     */
    @PostMapping("/api/short-link/v1/recycle-bin/recover")
    void recover(@RequestBody RecycleBinRecoverDTO requestParam);

    /**
     * 后管访问单个短链接指定时间内访问记录监控数据 （ok）
     * @return 单个短链接监控数据
     */
    @GetMapping("/api/short-link/v1/stats")
    Result<ShortLinkStatsRespDTO> oneShortLinkStats(@RequestParam("gid") String gid,
                                                    @RequestParam("fullShortUrl") String fullShortUrl,
                                                    @RequestParam("enableStatus")Integer enableStatus,
                                                    @RequestParam("startDate")String startDate,
                                                    @RequestParam("endDate")String endDate);

    /**
     * 后管访问分组短链接指定时间内访问记录监控数据 (ok)
     * @param requestParam 分组短链接请求参数
     * @return 分组短链接监控数据
     */
    @GetMapping("/api/short-link/v1/stats/access-record")
    Result<Page<ShortLinkStatsAccessRecordRespDTO>> shortLinkStatsAccessRecord(@SpringQueryMap ShortLinkStatsAccessRecordReqDTO requestParam);

    /**
     * 后管访问分组短链接指定时间内监控数据 (ok)
     * @param requestParam
     * @return
     *
     */
    @GetMapping("/api/short-link/v1/stats/group")
    Result<ShortLinkGroupStatsRespDTO> groupShortLinkStats(@SpringQueryMap ShortLinkGroupStatsReqDTO requestParam);

    /**
     * 后管访问分组短链接指定时间内访问记录监控数据 (ok)
     * @param requestParam
     * @return
     */
    @GetMapping("/api/short-link/v1/stats/access-record/group")
    Result<Page<ShortLinkStatsAccessRecordRespDTO>> groupShortLinkStatsAccessRecord(@SpringQueryMap ShortLinkGroupStatsAccessRecordReqDTO requestParam);

    /**
     * 删除回收站短链接
     */
    @PostMapping("/api/short-link/v1/recycle-bin/remove")
    Result<Void> remove(@RequestBody RecycleBinRemoveReqDTO requestParam);


}
